#ifndef __M_UTIL_H__
#define __M_UTIL_H__
#include <iostream>
#include <ctime>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

/*
实用工具类的实现：
1. 获取时间
2. 判断文件是否存在
3. 创建文件目录
4. 获取文件路径
*/
namespace log
{
    namespace util
    {
        class Date
        {
        public:
            static size_t now()
            {
                return (size_t)time(nullptr);
            }
        };

        class File
        {
        public:
            static bool exist(const std::string &pathname)
            {
                struct stat s;
                // 通过文件名filename获取文件信息，并保存在buf所指的结构体stat中
                // 返回值：成功返回0，失败返回-1，并且设置error的值
                return stat(pathname.c_str(), &s) == 0;
            }
            static void createDirectory(const std::string &pathname)
            {
                // ./linux/pthread/test
                // 从前往后创建

                int pre = 0;
                int index = 0;
                while (index < pathname.size())
                {
                    index = pathname.find_first_of("/\\", pre);
                    if (index == std::string::npos) // 没找到，说明就是当前路径
                    {
                        mkdir(pathname.c_str(), 0777);
                    }
                    std::string path = pathname.substr(0, index); // 找到，先创建父级目录
                    pre = index + 1;
                    mkdir(path.c_str(), 0777);
                }
            }
            static std::string Path(const std::string &pathname)
            {
                // ./as/a.txt
                int pos = pathname.find_last_of("/\\");
                if (pos == std::string::npos)
                    return ".";
                std::string path = pathname.substr(0, pos + 1);
                return path;
            }
        };
    }
}
#endif